Date and Time Formats
Table of Contents
1. Number Format Specifiers
Task 1 – Explore numeric format specifiers with FORMAT
Write a query that shows how the number 1234.56 looks when formatted using different numeric format specifiers:
- Standard numeric formats:
N,P,C,E,F - Custom numeric formats with precision:
N0,N1,N2 - Culture-specific numeric formats using
de-DEanden-US
The result should show two columns:
FormatType– the format specifier usedFormattedValue– the output ofFORMAT(1234.56, ...)
💡 Suggested Answers
SELECT 'N' AS FormatType, FORMAT(1234.56, 'N') AS FormattedValue
UNION ALL
SELECT 'P' AS FormatType, FORMAT(1234.56, 'P') AS FormattedValue
UNION ALL
SELECT 'C' AS FormatType, FORMAT(1234.56, 'C') AS FormattedValue
UNION ALL
SELECT 'E' AS FormatType, FORMAT(1234.56, 'E') AS FormattedValue
UNION ALL
SELECT 'F' AS FormatType, FORMAT(1234.56, 'F') AS FormattedValue
UNION ALL
SELECT 'N0' AS FormatType, FORMAT(1234.56, 'N0') AS FormattedValue
UNION ALL
SELECT 'N1' AS FormatType, FORMAT(1234.56, 'N1') AS FormattedValue
UNION ALL
SELECT 'N2' AS FormatType, FORMAT(1234.56, 'N2') AS FormattedValue
UNION ALL
SELECT 'N_de-DE' AS FormatType, FORMAT(1234.56, 'N', 'de-DE') AS FormattedValue
UNION ALL
SELECT 'N_en-US' AS FormatType, FORMAT(1234.56, 'N', 'en-US') AS FormattedValue;
2. Date Format Specifiers
Task 2 – Explore date and time format specifiers with FORMAT
Write a query that shows how GETDATE() is formatted using different date and time format specifiers (for example: D, d, dd, ddd, dddd, M, MM, MMM, MMMM, yy, yyyy, hh, HH, m, mm, s, ss, f, ff, fff, t, tt, etc.).
Each row should show:
FormatType– the format string you pass toFORMATFormattedValue– the result ofFORMAT(GETDATE(), FormatType)Description– a short explanation of what that format does
Note: The original script lists many specifiers; this is the same pattern in one big
UNION ALLquery.
💡 Suggested Answers
SELECT
'D' AS FormatType,
FORMAT(GETDATE(), 'D') AS FormattedValue,
'Full date pattern' AS Description
UNION ALL
SELECT
'd',
FORMAT(GETDATE(), 'd'),
'Short date pattern'
UNION ALL
SELECT
'dd',
FORMAT(GETDATE(), 'dd'),
'Day of month with leading zero'
UNION ALL
SELECT
'ddd',
FORMAT(GETDATE(), 'ddd'),
'Abbreviated name of day'
UNION ALL
SELECT
'dddd',
FORMAT(GETDATE(), 'dddd'),
'Full name of day'
UNION ALL
SELECT
'M',
FORMAT(GETDATE(), 'M'),
'Month without leading zero'
UNION ALL
SELECT
'MM',
FORMAT(GETDATE(), 'MM'),
'Month with leading zero'
UNION ALL
SELECT
'MMM',
FORMAT(GETDATE(), 'MMM'),
'Abbreviated name of month'
UNION ALL
SELECT
'MMMM',
FORMAT(GETDATE(), 'MMMM'),
'Full name of month'
UNION ALL
SELECT
'yy',
FORMAT(GETDATE(), 'yy'),
'Two-digit year'
UNION ALL
SELECT
'yyyy',
FORMAT(GETDATE(), 'yyyy'),
'Four-digit year'
UNION ALL
SELECT
'hh',
FORMAT(GETDATE(), 'hh'),
'Hour in 12-hour clock with leading zero'
UNION ALL
SELECT
'HH',
FORMAT(GETDATE(), 'HH'),
'Hour in 24-hour clock with leading zero'
UNION ALL
SELECT
'm',
FORMAT(GETDATE(), 'm'),
'Minute without leading zero'
UNION ALL
SELECT
'mm',
FORMAT(GETDATE(), 'mm'),
'Minute with leading zero'
UNION ALL
SELECT
's',
FORMAT(GETDATE(), 's'),
'Second without leading zero'
UNION ALL
SELECT
'ss',
FORMAT(GETDATE(), 'ss'),
'Second with leading zero'
UNION ALL
SELECT
'f',
FORMAT(GETDATE(), 'f'),
'Tenths of a second'
UNION ALL
SELECT
'ff',
FORMAT(GETDATE(), 'ff'),
'Hundredths of a second'
UNION ALL
SELECT
'fff',
FORMAT(GETDATE(), 'fff'),
'Milliseconds (thousandths of a second)'
UNION ALL
SELECT
't',
FORMAT(GETDATE(), 't'),
'Single character AM/PM designator'
UNION ALL
SELECT
'tt',
FORMAT(GETDATE(), 'tt'),
'Two character AM/PM designator';
This is a representative subset of the full list in the script. The original file continues in the same
UNION ALLpattern for all other date/time specifiers.
3. All Date Parts
Task 3 – Compare DATEPART, DATENAME, and DATETRUNC for different date parts
Write a query that:
-
For each supported date part (e.g.
year,yy,yyyy,quarter,month,mm,m,day,dd,d,dayofyear,dy,y,week,wk,isowk,weekday,dw,hour,hh,minute,mi,n,second,ss,s,millisecond,ms…) -
Shows one row with:
DatePart– the name/abbreviation of the date partDatePart_Output–DATEPART(<datepart>, GETDATE())DateName_Output–DATENAME(<datepart>, GETDATE())DateTrunc_Output–DATETRUNC(<datepart>, GETDATE())
This should be written as a single query using many UNION ALL blocks.
💡 Suggested Answers
SELECT
'Year' AS DatePart,
DATEPART(year, GETDATE()) AS DatePart_Output,
DATENAME(year, GETDATE()) AS DateName_Output,
DATETRUNC(year, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'YY',
DATEPART(yy, GETDATE()) AS DatePart_Output,
DATENAME(yy, GETDATE()) AS DateName_Output,
DATETRUNC(yy, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'YYYY',
DATEPART(yyyy, GETDATE()) AS DatePart_Output,
DATENAME(yyyy, GETDATE()) AS DateName_Output,
DATETRUNC(yyyy, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'Quarter',
DATEPART(quarter, GETDATE()) AS DatePart_Output,
DATENAME(quarter, GETDATE()) AS DateName_Output,
DATETRUNC(quarter, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'Q',
DATEPART(q, GETDATE()) AS DatePart_Output,
DATENAME(q, GETDATE()) AS DateName_Output,
DATETRUNC(q, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'Month',
DATEPART(month, GETDATE()) AS DatePart_Output,
DATENAME(month, GETDATE()) AS DateName_Output,
DATETRUNC(month, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'MM',
DATEPART(mm, GETDATE()) AS DatePart_Output,
DATENAME(mm, GETDATE()) AS DateName_Output,
DATETRUNC(mm, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'M',
DATEPART(m, GETDATE()) AS DatePart_Output,
DATENAME(m, GETDATE()) AS DateName_Output,
DATETRUNC(m, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'DayOfYear',
DATEPART(dayofyear, GETDATE()) AS DatePart_Output,
DATENAME(dayofyear, GETDATE()) AS DateName_Output,
DATETRUNC(dayofyear, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'DY',
DATEPART(dy, GETDATE()) AS DatePart_Output,
DATENAME(dy, GETDATE()) AS DateName_Output,
DATETRUNC(dy, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'Y',
DATEPART(y, GETDATE()) AS DatePart_Output,
DATENAME(y, GETDATE()) AS DateName_Output,
DATETRUNC(y, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'Day',
DATEPART(day, GETDATE()) AS DatePart_Output,
DATENAME(day, GETDATE()) AS DateName_Output,
DATETRUNC(day, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'DD',
DATEPART(dd, GETDATE()) AS DatePart_Output,
DATENAME(dd, GETDATE()) AS DateName_Output,
DATETRUNC(dd, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'D',
DATEPART(d, GETDATE()) AS DatePart_Output,
DATENAME(d, GETDATE()) AS DateName_Output,
DATETRUNC(d, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'Week',
DATEPART(week, GETDATE()) AS DatePart_Output,
DATENAME(week, GETDATE()) AS DateName_Output,
DATETRUNC(week, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'WK',
DATEPART(wk, GETDATE()) AS DatePart_Output,
DATENAME(wk, GETDATE()) AS DateName_Output,
DATETRUNC(wk, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'ISO_WEEK',
DATEPART(isowk, GETDATE()) AS DatePart_Output,
DATENAME(isowk, GETDATE()) AS DateName_Output,
DATETRUNC(isowk, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'WeekDay',
DATEPART(weekday, GETDATE()) AS DatePart_Output,
DATENAME(weekday, GETDATE()) AS DateName_Output,
DATETRUNC(weekday, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'DW',
DATEPART(dw, GETDATE()) AS DatePart_Output,
DATENAME(dw, GETDATE()) AS DateName_Output,
DATETRUNC(dw, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'Hour',
DATEPART(hour, GETDATE()) AS DatePart_Output,
DATENAME(hour, GETDATE()) AS DateName_Output,
DATETRUNC(hour, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'HH',
DATEPART(hh, GETDATE()) AS DatePart_Output,
DATENAME(hh, GETDATE()) AS DateName_Output,
DATETRUNC(hh, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'Minute',
DATEPART(minute, GETDATE()) AS DatePart_Output,
DATENAME(minute, GETDATE()) AS DateName_Output,
DATETRUNC(minute, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'MI',
DATEPART(mi, GETDATE()) AS DatePart_Output,
DATENAME(mi, GETDATE()) AS DateName_Output,
DATETRUNC(mi, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'N',
DATEPART(n, GETDATE()) AS DatePart_Output,
DATENAME(n, GETDATE()) AS DateName_Output,
DATETRUNC(n, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'Second',
DATEPART(second, GETDATE()) AS DatePart_Output,
DATENAME(second, GETDATE()) AS DateName_Output,
DATETRUNC(second, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'SS',
DATEPART(ss, GETDATE()) AS DatePart_Output,
DATENAME(ss, GETDATE()) AS DateName_Output,
DATETRUNC(ss, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'S',
DATEPART(s, GETDATE()) AS DatePart_Output,
DATENAME(s, GETDATE()) AS DateName_Output,
DATETRUNC(s, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'Millisecond',
DATEPART(millisecond, GETDATE()) AS DatePart_Output,
DATENAME(millisecond, GETDATE()) AS DateName_Output,
DATETRUNC(millisecond, GETDATE()) AS DateTrunc_Output
UNION ALL
SELECT
'MS',
DATEPART(ms, GETDATE()) AS DatePart_Output,
DATENAME(ms, GETDATE()) AS DateName_Output,
DATETRUNC(ms, GETDATE()) AS DateTrunc_Output;
4. All Culture Formats
Task 4 – Explore culture-specific number and date formatting
Write a query that shows how:
- The number
1234567.89 - And
GETDATE()
are formatted in various cultures (locale codes), using FORMAT with a culture argument, like:
FORMAT(1234567.89, 'N', 'en-US')
FORMAT(GETDATE(), 'D', 'en-US')
Each row should show:
CultureCode– e.g.'en-US','fr-FR','de-DE'FormattedNumber–FORMAT(1234567.89, 'N', CultureCode)FormattedDate–FORMAT(GETDATE(), 'D', CultureCode)
as a single query with UNION ALL.
💡 Suggested Answers
SELECT
'en-US' AS CultureCode,
FORMAT(1234567.89, 'N', 'en-US') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'en-US') AS FormattedDate
UNION ALL
SELECT
'en-GB' AS CultureCode,
FORMAT(1234567.89, 'N', 'en-GB') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'en-GB') AS FormattedDate
UNION ALL
SELECT
'fr-FR' AS CultureCode,
FORMAT(1234567.89, 'N', 'fr-FR') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'fr-FR') AS FormattedDate
UNION ALL
SELECT
'de-DE' AS CultureCode,
FORMAT(1234567.89, 'N', 'de-DE') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'de-DE') AS FormattedDate
UNION ALL
SELECT
'es-ES' AS CultureCode,
FORMAT(1234567.89, 'N', 'es-ES') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'es-ES') AS FormattedDate
UNION ALL
SELECT
'zh-CN' AS CultureCode,
FORMAT(1234567.89, 'N', 'zh-CN') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'zh-CN') AS FormattedDate
UNION ALL
SELECT
'ja-JP' AS CultureCode,
FORMAT(1234567.89, 'N', 'ja-JP') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'ja-JP') AS FormattedDate
UNION ALL
SELECT
'ko-KR' AS CultureCode,
FORMAT(1234567.89, 'N', 'ko-KR') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'ko-KR') AS FormattedDate
UNION ALL
SELECT
'pt-BR' AS CultureCode,
FORMAT(1234567.89, 'N', 'pt-BR') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'pt-BR') AS FormattedDate
UNION ALL
SELECT
'it-IT' AS CultureCode,
FORMAT(1234567.89, 'N', 'it-IT') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'it-IT') AS FormattedDate
UNION ALL
SELECT
'nl-NL' AS CultureCode,
FORMAT(1234567.89, 'N', 'nl-NL') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'nl-NL') AS FormattedDate
UNION ALL
SELECT
'ru-RU' AS CultureCode,
FORMAT(1234567.89, 'N', 'ru-RU') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'ru-RU') AS FormattedDate
UNION ALL
SELECT
'ar-SA' AS CultureCode,
FORMAT(1234567.89, 'N', 'ar-SA') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'ar-SA') AS FormattedDate
UNION ALL
SELECT
'el-GR' AS CultureCode,
FORMAT(1234567.89, 'N', 'el-GR') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'el-GR') AS FormattedDate
UNION ALL
SELECT
'tr-TR' AS CultureCode,
FORMAT(1234567.89, 'N', 'tr-TR') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'tr-TR') AS FormattedDate
UNION ALL
SELECT
'he-IL' AS CultureCode,
FORMAT(1234567.89, 'N', 'he-IL') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'he-IL') AS FormattedDate
UNION ALL
SELECT
'hi-IN' AS CultureCode,
FORMAT(1234567.89, 'N', 'hi-IN') AS FormattedNumber,
FORMAT(GETDATE(), 'D', 'hi-IN') AS FormattedDate;